package controller

import (
	"net/http"
	"test/models"

	"github.com/gin-gonic/gin"
)

//url     -> controller -> （logic）   -> model
//请求来了 -> 控制器     -> （业务逻辑） -> 模型层的增删改查

// 新增一个Todo
func CreateTodo(c *gin.Context) {
	//1、从请求中把数据拿出来
	var todo models.Todo
	c.BindJSON(&todo)
	//2、存入数据库
	err := models.CreateATodo(&todo)
	//3、返回响应
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"error": err.Error(),})
	}else{
		// c.JSON(http.StatusOK, gin.H{
		// 	"code": 2000,
		// 	"msg": "success",
		// 	"data": todo,
		// })
		c.JSON(http.StatusOK, todo)
	}
}

// 查询所有的Todo
func GetTodoList(c *gin.Context) {
	todoList, err := models.GetAllTodo()
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	}else{
		c.JSON(http.StatusOK, todoList)
	}
}

//更新Todo
func UpdateATodo(c *gin.Context) {
	//看传过来的id是否合法
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error": "无效id"})
		return
	}

	//先查找该数据是否存在
	todo, err := models.GetATodo(id)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
		return
	}

	//修改
	c.BindJSON(&todo)
	err = models.UpdateATodo(todo)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	}else{
		c.JSON(http.StatusOK, todo)
	}
}

func DeleteATodo(c *gin.Context) {
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error": "无效id"})
		return
	}
	err := models.DeleteATodo(id)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"error": err.Error(),
		})
	}else{
		c.JSON(http.StatusOK, gin.H{
			id:"deleted",
		})
	}
}